#ifndef FEATUREMATCH_H
#define FEATUREMATCH_H

#include <vector>
#include <opencv2/core/core.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/nonfree/nonfree.hpp>
#include "timestamp.h"
class FeatureMatch
{
public:
    FeatureMatch();
    bool detectSift(cv::Mat img, cv::Rect object);
    bool detectSift(cv::Mat img, cv::Mat mask, TimeStamp ts = TimeStamp());
    bool matchSift(cv::Mat img, cv::Rect area);
    bool matchSift(cv::Mat img, cv::Mat mask, TimeStamp ts = TimeStamp());
    bool detectSurf(cv::Mat img, cv::Rect object);
    bool detectSurf(cv::Mat img, cv::Mat mask, TimeStamp ts = TimeStamp());
    bool matchSurf(cv::Mat img, cv::Rect area);
    bool matchSurf(cv::Mat img, cv::Mat mask, TimeStamp ts = TimeStamp());
    bool detectOrb(cv::Mat img, cv::Mat mask, TimeStamp ts = TimeStamp());
    bool matchOrb(cv::Mat img, cv::Mat mask, TimeStamp ts = TimeStamp());
    bool calcColorFeature(cv::Mat img, cv::Rect obj);
    bool matchColor(cv::Mat img, cv::Rect &obj);
    cv::Mat m_temp_img;
    cv::Mat m_descriptors;
    cv::Mat m_match_img;
    cv::Mat m_hist;
    cv::Mat m_backkproj;
    std::vector<cv::KeyPoint> m_keypoints;
    std::vector<cv::DMatch> m_matches;
    std::vector<cv::KeyPoint> m_matched_points;
    int m_detect_cost;
    int m_match_cost;
    int m_calc_cost;

};

#endif // FEATUREMATCH_H
